#在jenkins里面执行的脚本
#BUILD_NUMBER， 唯一标识一次build，例如23；
#BUILD_ID，基本上等同于BUILD_NUMBER，但是是字符串，例如2011-11-15_16-06-21；
#JOB_NAME， job的名字，例如JavaHelloWorld；
#BUILD_TAG，作用同BUILD_ID,BUILD_NUMBER,用来全局地唯一标识一此build，例如jenkins-JavaHelloWorld-23；
#EXECUTOR_NUMBER， 例如0；
#NODE_NAME，slave的名字，例如MyServer01；
#NODE_LABELS，slave的label，标识slave的用处，例如JavaHelloWorld MyServer01；
#JAVA_HOME， java的home目录，例如C:\Program Files (x86)\Java\jdk1.7.0_01；
#WORKSPACE，job的当前工作目录，例如c:\jenkins\workspace\JavaHelloWorld；
#HUDSON_URL = JENKINS_URL， jenkins的url，例如http://localhost:8000/ ；
#BUILD_URL，build的url 例如http://localhost:8000/job/JavaHelloWorld/23/；
#JOB_URL， job的url，例如http://localhost:8000/job/JavaHelloWorld/；

#!/bin/bash
#scp_remote_restart.sh 用于将上次构建的结果备份，然后将新的构建结果移动到合适的位置
# 先判断文件是否存在，如果存在，则备份
#/opt/deploy/jenkinsWeb/

# +++++++++++++++++++++++++ 方案一: jenkins中 执行脚本(可以使用一些环境变量)   +++++++++++++++++++++++++++++++++++++
#APP_NAME_PATH="/usr/local/server/cloud-eureka-server/cloud-eureka-server.jar"
#远程服务器保存程序目录
DIR_PATH="/usr/local/server/cloud-eureka-server/"
#目标程序名称
APP_NAME="cloud-eureka-server"
APP_NAME_PATH=${DIR_PATH}${APP_NAME}".jar"

# ssh 远程执行命令里面不能用 if 等判断条件
#cmd="$(echo
#        "if [ -f $APP_NAME_PATH ] then
#           mv $APP_NAME_PATH $APP_NAME_PATH.`date +%Y%m%d%H%M%S`
#         fi"
#     )"

cmd="$(echo "mv $APP_NAME_PATH $APP_NAME_PATH.`date +%Y%m%d%H%M%S`")"

# 通过ssh执行备份文件
ssh git@10.138.25.244 $($cmd)

#打包时指定文件名，不要版本信息
# package -Dmaven.test.skip=true  -Djar.finalName=${project.name}
# 远程复制文件
#scp $WORKSPACE/$APP_NAME/target/$APP_NAME".jar" git@10.138.25.244:$APP_NAME_PATH
scp $WORKSPACE/$APP_NAME/target/$APP_NAME"-0.0.1-SNAPSHOT.jar" git@10.138.25.244:$APP_NAME_PATH
#scp /root/.jenkins/workspace/DEV-cloud-eureka-server/cloud-eureka-server/target/cloud-eureka-server.jar git@10.138.25.244:/usr/local/server/cloud-eureka-server/cloud-eureka-server.jar

#jinkens任务执行完成后，有时会将启动的子进程杀掉，这个让避免杀掉子进程
#OLD_BUILD_ID=$BUILD_ID
#echo $OLD_BUILD_ID
#BUILD_ID=dontKillMe

#重新启动服务
ssh git@10.138.25.244 ${DIR_PATH}"restart.sh"
#ssh git@10.138.25.244: /usr/local/server/cloud-eureka-server/restart.sh

#改回原来的BUILD_ID值
#BUILD_ID=$OLD_BUILD_ID
#echo $BUILD_ID



# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# +++++++++++++++ 方案二: 设置在运行服务器上执行的脚本 +++++++++++++++++++++++++++
# 默认设置程序所在目录名称和程序文件名一致，进行相关处理。
# 例如：/usr/local/server/cloud-eureka-server/cloud-eureka-server.jar
#获取此脚本所在的目录位置
CURR_DIR_PATH="$(cd "$(dirname $0)/"; pwd)"
# CURR_DIR_PATH 值为 "/usr/local/server/cloud-eureka-server"
#固定值时用
#CURR_DIR_PATH="/usr/local/server/cloud-eureka-server"
#获取目录的名称，目录名称即程序打包的名称
CURR_APP_NAME="${CURR_DIR_PATH##*/}"
#CURR_APP_NAME="cloud-eureka-server"
APP_NAME_PATH=$CURR_DIR_PATH/$CURR_APP_NAME".jar"

#如果文件已存在，备份原来文件
if [ -f "$APP_NAME_PATH" ]
then
  #mv $APP_NAME_PATH  $APP_NAME_PATH.`date +%Y%m%d%H%M%S`
  mv $APP_NAME_PATH $APP_NAME_PATH.`date +%Y%m%d`
fi

# 重新启动
sh restart.sh
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# +++++++++++++++ 方案三: 使用 Publish over SSH 插件（个人感觉比较简单，只需在项目发布里面简单配置） +++++++++++++++++++++++++++


#配置执行脚本用户的权限
#打开 sudo 权限配置文件，
visudo -f /etc/sudoers
#添加用户执行服务权限配置
#配置 git 用户通过 sudo 以 root 用户无密码验证执行如下命令 SOFTWARE，SERVICES，PROCESSES
git   ALL =(root) NOPASSWD:SOFTWARE,NOPASSWD:SERVICES,NOPASSWD:PROCESSES

#先备份原文件
mv /usr/local/server/cloud-eureka-server/cloud-eureka-server.jar   /usr/local/server/cloud-eureka-server/cloud-eureka-server.jar.`date +%Y%m%d%H%M%S`

#上传文件，并重启服务
#/usr/local/servercloud-eureka-server/server.sh restart
#配置为开机自启动的服务
sudo service cloud-eureka-server restart